Мой Argus бот для распознавания текста на фото и изображениях потихоньку раскручивается
Добавил к нему кнопки быстрых действий и увеличил число
Эксперименты показали, что
На неделе добавится распознавание рукописного текста
#tgbot #argus #php #ai
Добавил к нему кнопки быстрых действий и увеличил число
LLM
до четырех - две основные и две на фоллбэк.Эксперименты показали, что
Mistral OCR
в среднем по качеству близок к FineReader
(где-то лучше, где-то хуже). Но выдают они данные, естественно, в разных форматах.На неделе добавится распознавание рукописного текста
#tgbot #argus #php #ai
Книжки
Общеполезное
The Pragmatic Programmer by Andrew Hunt and David Thomas
Code Complete by Steve McConnell
Coding
Clean Code by Robert C. Martin
Refactoring by Martin Fowler
Software Architecture
Designing Data-Intensive Applications by Martin Kleppmann
Object-Oriented Analysis and Design with Applications by Grady Booch
Design Patterns
Design Patterns by Eric Gamma and Others
Domain-Driven Design by Eric Evans
Data Structures and Algorithms
Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein
Cracking the Coding Interview by Gayle Laakmann McDowell
#learning #book
Общеполезное
The Pragmatic Programmer by Andrew Hunt and David Thomas
Code Complete by Steve McConnell
Coding
Clean Code by Robert C. Martin
Refactoring by Martin Fowler
Software Architecture
Designing Data-Intensive Applications by Martin Kleppmann
Object-Oriented Analysis and Design with Applications by Grady Booch
Design Patterns
Design Patterns by Eric Gamma and Others
Domain-Driven Design by Eric Evans
Data Structures and Algorithms
Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein
Cracking the Coding Interview by Gayle Laakmann McDowell
#learning #book
This media is not supported in your browser
VIEW IN TELEGRAM
Дожили
В
Теперь сайт Аэроэкспреса пофиксят...
#chrome #css
В
Chrome 135
появилась возможность стилизовать нативный <select>
Теперь сайт Аэроэкспреса пофиксят...
#chrome #css
В
Однако полной замены
Но для ванильных случаев это полезное нововведение
#css
CSS
есть @scope
функция, ограничивающая область применения стилей:<template>
<div class="box">
<button class="button">Click me</button>
</div>
</template>
<style>
@scope (.box) {
.button {
color: red;
}
}
</style>
Однако полной замены
Vue scoped
она не может дать. Например, потому, что если компонент выше вывести списком, то во Vue
у каждого будет свой data
атрибут и своя область видимости стилей, а у @scope
всё смешаетсяНо для ванильных случаев это полезное нововведение
#css
Добавил в Argus распознавание рукописного текста, а так же других сложных картинок (надо в подписи к картинке отправлять символ "+" для перехода в этот режим)
Для этого поэкспериментировал с 18 бесплатными
В комментариях люди поделились интересными ссылками для облегчения жизни
https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground - бесплатный
https://www.comss.ru/page.php?id=7315 - обход региональных блокировок и не только
#argus #ocr #tgbot
Для этого поэкспериментировал с 18 бесплатными
LLM
моделями для выбора лучшей, тут отчетВ комментариях люди поделились интересными ссылками для облегчения жизни
AI
энтузиастов:https://github.com/marketplace/models/azure-openai/gpt-4o-mini/playground - бесплатный
gpt-4o
прям на GitHub
https://www.comss.ru/page.php?id=7315 - обход региональных блокировок и не только
#argus #ocr #tgbot
Глубокое клонирование реактивных объектов в Vue 3
3 рабочих способа
1. Комбинация
2. Ручное глубокое копирование
3. Библиотечные решения
#tip #reactivity
Vue 3
использует Proxy
для реактивности, что создает проблемы при попытке клонировать объекты. Стандартные методы работают не так, как ожидается:const state = reactive({ user: { name: "Al" } });
// Проблемы:
const badCopy1 = { ...state }; // сохраняет Proxy-ссылки
const badCopy2 = JSON.parse(JSON.stringify(state)); // теряет методы и Proxy
3 рабочих способа
1. Комбинация
toRaw
+ structuredClone
import { toRaw } from 'vue';
const original = reactive({ data: 123 });
const copy = structuredClone(toRaw(original));
2. Ручное глубокое копирование
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') return obj;
const clone = Array.isArray(obj) ? [] : {};
for (const key in obj) {
clone[key] = deepClone(obj[key]);
}
return clone;
}
const copy = reactive(deepClone(toRaw(original)));
3. Библиотечные решения
import { cloneDeep } from 'lodash-es';
const copy = reactive(cloneDeep(toRaw(obj)));
#tip #reactivity
This media is not supported in your browser
VIEW IN TELEGRAM
Хорошая библиотека
Долго мучился с расположением при динамично меняющемся таргет элементе - все как-то через одно место криво работало. Решил поставить
Немного радует, что довольно часто обновляется и фиксят баги.
P.S. Ререндеринг через `:key` - плохая практика. Последний вариант.
#lib #arkui
Ark-ui
, но с особенностями. Особенно у "выпадашки" HoverCard
(для меню которая)Долго мучился с расположением при динамично меняющемся таргет элементе - все как-то через одно место криво работало. Решил поставить
:key
на HoverCard
и инкрементить его при апдейтах - и всё сразу заработало как надо. Ну, ё-моё...Немного радует, что довольно часто обновляется и фиксят баги.
P.S. Ререндеринг через `:key` - плохая практика. Последний вариант.
#lib #arkui